#include <iostream>
#include <vector>
using namespace std;

void print_status(int status[8]) {
    for (int i = 0; i < 7; i++) {
        cout << status[i] << ", ";
    }
    cout << status[7] << endl;
}

void add_chess(int num[][8], int x, int y) {
    for (int i = 0; i < 8; i++) {
        num[x][i] = 1;
        num[i][y] = 1;
        if (x - i >= 0 && y - i >= 0) {
            num[x - i][y - i] = 1;
        }
        if (x - i >= 0 && y + i < 8) {
            num[x - i][y + i] = 1;
        }
        if (x + i < 8 && y + i < 8) {
            num[x + i][y + i] = 1;
        }
        if (x + i < 8 && y - i >= 0) {
            num[x + i][y - i] = 1;
        }
    }
}

void clear_status(int num[][8]) {
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            num[i][j] = 0;
        }
    }
}

void set_status(int num[][8], int status[8]) {
    clear_status(num);
    for (int i = 0; i < 8; i++) {
        if (status[i] == 0 || status[i] == 9) {
            return;
        }
        add_chess(num, i, status[i] - 1);
    }
}

int get_next_y_pos(int status[8], int x_pos) {
    int i;
    for (i = status[x_pos] + 1; i <= 8; i++) {
        int j;
        for (j = 0; j < x_pos; j++) {
            if (status[j] == i) {
                break;
            }
        }
        if (j == x_pos) {
            return i;
        }
    }
    return i;
}


int main() {
    int num[8][8] = {0};
    int status[8] = {0};

    int x_pos = 0;
    int y_pos = 1;
    int cnt = 0;
    while (1) {
        if (x_pos == 8) {   // 说明完成了一个状态
            print_status(status);
            cnt++;
            x_pos--;
        }
        y_pos = get_next_y_pos(status, x_pos);
        while (y_pos == 9) {
            
            status[x_pos] = 0;
            x_pos--;
            y_pos = get_next_y_pos(status, x_pos);
        }
        if (x_pos == -1) break;
        status[x_pos] = 0;
        set_status(num, status);
        status[x_pos] = y_pos;
        if (num[x_pos][y_pos - 1] == 0) {
            x_pos++;
        }
    }
    cout << cnt << endl;
    return 0;
}